Acquisition of application performance data is an important but difficult task because efforts to gather the performance data may change the behavior of the monitored application, which, in turn, also affects the acquired performance data. In a possible worst case, performance monitoring may cause a malfunction or even a crash of the application. Current bytecode instrumentation based performance monitoring tools provide performance data at a fine-grained level (e.g., down to data describing single method calls). Information at this detailed level is powerful for quickly and efficiently finding and eliminating performance problems. Acquisition of such high-quality information requires the placement of a large quantity of bytecode instrumentations for performance monitoring into the bytecode of the monitored application. The monitoring sensors also create a large amount of measurement data that has to be aggregated and analyzed.
Further, monitoring of globally-distributed applications requires transfer of original bytecode and instrumented bytecode over network connections. This process may be aided and enhanced by compression and/or encryption of the bytecode. However, it is subject to bottlenecks, both caused by network connections and the instrumentation process. For example, an unreliable or failed network connection can stall the instrumentation process.